

\documentclass{article}

\usepackage{hyperref} % 用于生成可点击的交叉引用链接
\usepackage[nameinlink]{cleveref} % cleveref 包，nameinlink 选项让链接包含名称
\usepackage{ctex}
\usepackage{graphicx}

% 作者信息
\title{Jekins引用重置}
\author{张毅}
\begin{document}
	\maketitle
	
	\newpage
	Jenkins 是一个流行的开源自动化服务器，广泛应用于软件开发领域，用于实现持续集成（Continuous Integration, CI）和持续交付（Continuous Delivery, CD）流程。它的核心目的是提高软件开发的效率和质量，通过自动化构建、测试和部署等环节。以下是 Jenkins 的关键特性和用途：
	\begin{enumerate}
		\item 	自动化构建与测试：Jenkins 可以配置为监听代码仓库（如 Git, SVN）的变化，一旦检测到代码提交，就会自动拉取最新代码，执行构建脚本，编译代码，并运行单元测试和集成测试，确保每次代码变更都能顺利构建且符合质量标准。
		\item 	持续集成与持续交付：作为CI/CD工具，Jenkins 支持从代码提交到最终部署到生产环境的整个流程自动化，减少人工干预，加速软件的迭代速度。
		\item 	插件丰富：Jenkins 拥有一个庞大的插件生态系统，支持与各种版本控制系统、构建工具（如 Maven, Gradle）、测试框架、部署环境等集成，几乎可以满足任何自动化需求。
		灵活的调度：用户可以设定定时任务，比如每天夜间自动构建，或者在特定时间点执行部署。这有助于安排资源使用，优化工作流程。
		\item 	分布式构建：Jenkins 支持主从架构，可以将构建任务分发到多台机器上执行，从而加快构建速度，处理更大规模的项目。
		可视化界面与报告：提供直观的Web界面，用户可以通过浏览器配置任务、查看构建状态、历史记录以及详细的构建报告，便于团队协作和问题追踪。
		\item 	社区支持：作为一个开源项目，Jenkins 拥有活跃的开发者和用户社区，不断更新维护，解决用户遇到的问题，分享最佳实践。
	\end{enumerate}
	
	综上所述documentenkins 是现代软件开发中不可或缺的工具，它极大地提升了开发效率，保证了软件质量，降低了人为错误，促进了敏捷开发实践的实施。
	
	%\chapter{第一章}
	\section{安装部署}
	\subsection{gitlab服务}
	gitlab 至少需要6个G
	
	代码管理,例如svn,或者gitee,github
	
	\subsection{jenkins-server}\label{label:jenkins-environment}
	jenkins服务器,需要Maven,JDK,git
	
	\begin{enumerate}
		\item 从git拉取代码
		\item 打包,这里就需要用到Maven打包,那么就需要安装一个Maven,去官网下载并安装即可
		\item 发布到测试服务器,并启动
		\item 如果需要部署vue项目,需要安装node.js和npm
	\end{enumerate}
	
	官网下载一个war包,目前我建议选择高版本的,较低版本的Jenkins安装插件会有点问题
	
	\subsection{test-server}
	测试应用所在的服务器,需要安装JDK
	
	\section{使用jenkins-构建java后端}
	使用Jenkins 之前需要确保jenkins服务器中已经存在了\ref{label:jenkins-environment}
	
	jenkins 编译完成的代码在jenkins服务器所在的 /root/.jenkins/workspace 目录下
	\subsection{新建Maven项目}
	新建Item项目的时候没有Maven选项,解决方案见\ref{label:maven_ext}。
	\subsection{详情配置}
	\subsubsection{General}
	
	\subsubsection{源码管理}
	选择git 
	
	\begin{enumerate}
		\item 配置git仓库地址,Http的方式
		\item 指定分支
		\begin{enumerate}
			\item */master
		\end{enumerate}
		
	\end{enumerate}
	
	
	\subsubsection{构建触发器}
	这个可以不配置,如果有定制的构建需求,才配置
	默认不修改,可以先不做配置(这种不太方便,这里就不赘述了)
	
	
	几种常用的构建触发器
	\begin{enumerate}
		\item Authorithen github有推送,就触发jenkins项目的构建,git 使用url 触发jenkins的构建
		
	\end{enumerate}
	
	\subsubsection{Pre steps}
	构建项目之前做的事情,可以先不做配置,
	
	停止已启动的引用
	\begin{enumerate}
		\item exec command 执行一个Shell , sh xx.sh, 这个配置和Transfer files 可以只配置一个, 这个xx.sh 是在家目录下的 ./stop.sh 8083
	\end{enumerate}
	
	做一个文件备份
	\begin{enumerate}
		\item exec command 执行一个Shell , sh xx.sh, 这个配置和Transfer files 可以只配置一个, 这个xx.sh 是在家目录下的  ./backup.sh tantanshu
	\end{enumerate}
	
	\subsubsection{build}
	\textbf{Maven Version}
	这里如何无法识别的话,就需要全局配置一下Maven\ref{label:maven}
	
	\begin{enumerate}
		\item 	Root Pom : 需要填写的项目名称 demo-1/pom.xml
	\end{enumerate}
	
	这里的maven 会在拉取完项目时候,自动触发构建,我们只要保证jenkins服务器安装了maven,并正确的配置了环境变量,jenkins正确配置了maven全局的配置即可, 自动触发maven构建
	
	\subsubsection{Post Step}
	构建完成之后,发布到测试服务器中,可以先不配置\label{label:post Step}
	
	\textbf{选择send files or execute commands over SHH}
	开始配置服务器信息
	\begin{enumerate}
		\item Name 是读取的服务器列表,需要在全局服务器配置中配置一下\ref{label:ssh}
		\item Transfer Set Source Files 要传输的源文件 **/demo-*.jar ,默认是从.jenkins/workspace 的位置开始读取的,这里是支持正则表达式的
		\item Remove prefix 移除前缀,tantanshu-web/target
		\item  Romote Directory 远程目录,默认在家目录中(测试服务器中的家目录),这里最好写一个,xxoo 之前不存在的
		\item Exec Command 传输完成后执行的命令 nohup 启动项目, 这里支持shell脚本,也支持多个Linux指令的执行
	\end{enumerate}
	上述配置最终产生的效果为 /root/tantanshu/*.jar 生成一个jar包
	
	\includegraphics[width=1.0\textwidth]{postSteps/transferSet01.png}
	
	
	传输Dockerfile至服务器
	
	\includegraphics[width=1.0\textwidth]{postSteps/transferSet02.png}
	
	传输shell 至服务器并执行shell脚本
		
	\includegraphics[width=1.0\textwidth]{postSteps/transferSet03.png}
	
	链接超时机制的问题: 如果传输的文件很大,并不是每次都会出现的,偶现,指定一个超时时间,这里是以ms为单位的
	
	
	\subsubsection{构建环境}
	如果jdk版本不一致,jenkins运行版本17, 项目运行jdk1.8,可以配置全局jdk\ref{lable:jdk:config}
	
	\begin{enumerate}
		\item With Ant  选择全局配置的jdk版本
	\end{enumerate}
	
	\subsection{安装插件-Manage Plugin}
	 插件的安装,不需要重启Jenkins服务器
	\subsubsection{安装Maven插件}
	由于新建Item 项目的时候没有Maven选项,所以需要安装一个Maven插件,这里的Maven插件和Maven仓库不是一个概念\label{label:maven_ext}
	

	\subsubsection{安装publish ssh插件}
	测试服务器发送jar包时使用,安装完毕之后,在item中配置服务器信息\ref{label:post Step}


	\subsubsection{安装nodejs插件}
	jenkins安装nodejs插件,\label{lable:nodejs:plu}
	
	\subsection{全局的证书认证}
	git 账号密码全局认证
	\begin{enumerate}
		\item jenkins管理 \textbf{->} 凭据管理
		
		\includegraphics[width=1.0\textwidth]{git_auth/git_operation1.png}
		
		\item 系统凭证
		
		\includegraphics[width=1.0\textwidth]{git_auth/git_operation2.png}
		
		\item 输入用户名,密码
		
		\includegraphics[width=1.0\textwidth]{git_auth/git_authonrithen.png}
		
		\item 结果展示
		
		\includegraphics[width=1.0\textwidth]{git_auth/result.png}
	\end{enumerate}
	
	\subsection{全局Glabal配置}
	
	\subsubsection{配置git}
	需要配置git 否则 无法链接到git 仓库 /usr/local/bin/git  jenkins 服务器中的git
	
	git installations
	\begin{enumerate}
		\item Name 自定义
		\item Path to Git execu  /usr/local/bin/git
	\end{enumerate}
	
	\subsubsection{配置maven}\label{label:maven}
	\begin{enumerate}
		\item Name  自定义即可
		\item MAVEN\_HOME 到bin的路径就可以,如 /usr/local/Maven
		
	\end{enumerate}
	
		\subsubsection{配置jdk}
	主要是用于jdk版本隔离,jenkins运行jdk为17 ,项目中的jdk为1.8
	
	\begin{enumerate} \label{lable:jdk:config}
		\item 项目中需要指定pom.xml需要指定打包的jdk版本
		\item 别名, JDK1.8 自定义即可
		\item JAVA\_HOME  /usr/local/jdk1.8
	\end{enumerate}
	
	
	\subsection{系统管理}
	\subsubsection{配置SSH服务器}\label{label:ssh}
	
	这里可以采用密码验证,也可以使用免密登录
	
	配置服务器,Item 在Post Step 中可以选择
	\begin{enumerate}
		\item HostName ip地址
		\item UserName 用户名
		\item Remove Prefix 默认移除的前缀,可以忽略,也可以配置,demo-1/target
		\item Remote Directory   可以为null
		\item password 输入密码
		\item  Test 测试一下链接
	\end{enumerate}
	
	\subsubsection{配置nodeljs}\label{label:nodejs:peizhi}
	配置nodejs的环境变量信息
	\begin{enumerate}
		\item 别名,自定义
		\item 安装目录 /opt/software/node/bin
	\end{enumerate}
	
	
	\subsection{容器化构建的几种方式}

	\begin{enumerate}
		\item 宿主主机内的一个目录, 使用Docker 通过挂载的方式来启动
		\item 编写DockerFile,打包jar包至镜像
		\item Kubernetes (K8s): Kubernetes是一个容器编排平台，它不仅能够管理单个容器，还能自动化容器化的应用部署、扩展和管理。虽然Kubernetes本身不直接构建容器镜像，但它与Docker或其他容器镜像构建服务（如Google Cloud Build、GitHub Actions等）集成，可以自动化容器镜像的构建和部署流程。
	\end{enumerate}
	
	\section{使用jenkins构建前端项目}
	
	\subsection{新建freeStyle项目}
	构建前端项目之前需要确保 \ref{label:jenkins-environment},同时确保jenkins安装了node.jS插件,\ref{lable:nodejs:plu},全局配置中设置nodeJS的环境变量\ref{label:nodejs:peizhi}
	
	\subsection{配置git仓库地址}
	参见
	
	这里有一个很重要的理解: jenkins 拉取完项目后,会默认切换到 该项目的工作目录中,无需考虑文件的目录位置
	
	\subsection{构建前执行}
	参见
	
	\subsection{发送文件至服务器}
	配置项解释参考, 如下配置产生的结果,在目标服务器/root/目录下生成 wealth-center-front 文件夹,用来存放项目源码,并将$dist.tgz$ 传输至 wealth-center-front 文件夹内
	
	\includegraphics[width=1.0\textwidth]{postSteps/transferSetfront.png}
	
\end{document}